import axios, { AxiosError } from "axios"
import { userStore } from '@/store';
import { ElMessage } from "element-plus";
import { router } from "@/router"

const instance = axios.create({
    baseURL: 'http://xue.cnkdl.cn:9082/mall-admin',
    timeout: 1000
})

// 请求拦截器
instance.interceptors.request.use(config => {
    // 在这里进行请求拦截，获取token
    let token = localStorage.getItem('token')

    if (token) {
        config.headers && (config.headers['Authorization'] = token)

        // config.headers = config.headers || { }
        // config.headers['Authorization'] = token;
    }

    return config
}, err => Promise.reject(err))

// 响应拦截器
instance.interceptors.response.use(res => {
    const useStore = userStore()
    // console.log(res);
    if (res.data.code === 401) {
        // 提示用户
        ElMessage.warning(res.data.message)
        // 删除token
        localStorage.removeItem("token");
        // 返回login登录页面
        router.push("/login");
        // 删除路由
        // 得到 pinia 里面的 一级菜单数组，数组里面的对象的 name 属性就是 对应的 路由的name
        useStore.menusAll.forEach((item) => {
            router.removeRoute(item.name);
        });
        // setTimeout(() => {
        //     console.log(router.getRoutes());
        // }, 2000);
        router.removeRoute("home");
        // 删除pinia里面的数据
        useStore.menus = [];
    }
    res.data.code !== 200 && ElMessage.error(res.data.message);

    return res.data

},
    (err: AxiosError) => {
        // 如果请求不是200，也需要在这进行处理
        ElMessage.error(`请求出问题了，请联系管理员,错误信息为：${err.message}`)
        // 在一些地方，记录一上你的报错 - 例如：localstorage 之类的 - 具体看你们自己的产品要求你们如何实现
        // 如果是请求失败，比如： 404 就 要在这处理
        Promise.reject(err)
    })



export default instance